package cn.oversky.eom.exception;


/**
 * @email CorvusY@foxmail.com
 * @date 2016/11/4 9:25.
 * Now is history !
 */
public enum EomExceptionEnumImpl implements EomExceptionEnum {


    /*------------------ 认证异常 A：取认证英文 Authentication 首字母 --------------*/
    A001("A001","appId 或 appPwd 存在空值：%s"),
    A101("A101","appId、appPwd存在错误"),
    A102("A102","未授权或权限信息过期"),

    A103( "A103", "账号不存在，请确认"),
    A104( "A104", "密码有误，请确认"),
    A106( "A106", "密码错误或无此权限"),
    A107( "A107", "账号被拉黑了，请联系管理员"),

    /*--------------------- 业务异常 B：取业务英文 Business 首字母 -----------------*/
    // 值空相关的错误代码：B0
    B001("B001","消息结构存在空值：%s"),                         // msgHeader msgBody 空值异常，一个占位符
    B002("B002","%s 值不允许为空"),                              // msgBody中的属性名
    // 第三方接口相关的错误代码 B1
    B101("B101","不存在接口类型：%s"),                           // uploadType 不存在，一个占位符
    B102("B102","消息不符合JSON格式：%s"),                       // 字典转换出错中的属性名
    B103("B103","字段转换时出错,消息体：%s，字典映射：%s"),        // 字典转换出错中的属性名
    B104("B104","属性 %s 的值 %s 不符合格式要求：%s"),           // 属性名对应的值不符合格式要求，三个占位符     1 属性名；2 属性值；3 正则表达式，或者格式要求

    // CRUD 相关的错误代码 B2
    B201( "B201", "操作失败，存在重复数据 %s"),
    // CRUD 相关的错误代码 B2
    B202( "B202", "操作失败，数据不完整 %s"),
    B203( "B203", "操作失败，不存在对应邮箱或者邮箱冲突 %s"),
    B204( "B204", "操作失败，不存在对应供应商 %s"),
    B205( "B205", "操作失败，不存在对应校区 %s"),
    B206( "B206", "该科目已组试卷，删除该题将导致数量不足无法组卷"),
    B207( "B207", "已存在相同名称分类"),
    B208( "B208", "已存在相同名称项目"),
    B209( "B209", "已存在相同名称科目"),
    B210( "B210", "大题需要有相关小题"),
    B211( "B211", "题目的图片和文本需要填一项"),
    B212( "B212", "答案的图片和文本需要填一项"),
    B213( "B213", "题目需要有答案"),
    B214( "B214", "大题题目名称不能为空"),
    B215( "B215", "小题题目不能为空"),
    B216( "B216", "答案的图片和文本只能填一项"),
    B217( "B217", "该科目已组试卷，更改难度将导致该难度数量不足无法组卷"),
    B218( "B218", "字数过长请重新输入！"),
    B219( "B219", "此人已设置为负责人！"),
    B220( "B220", "邮箱密码错误！"),
    B221( "B221", "请检查城市信息：%s"),
    B222( "B222", "请选择修改项"),
    B223( "B223", "考试已完成不能取消报名"),
    B224( "B224", "操作失败，不存在对应PDC %s"),
    B225( "B225", "操作失败，不存在对应书籍 %s"),
    B226( "B226", "出库数量超过库存数量"),
    B227( "B227", "库存中没有该教材"),
    B228( "B228", "操作失败，不存在对应简历 %s"),
    B229( "B229", "补发数量超过库存数量"),
    B230( "B230", "使用配额已满"),
    B231( "B231", "机构已存在"),
    B232( "B232", "所选中机构下，宣讲行程已存在"),
    B233( "B233", "各机构最多只能设置4个个性化标签(企业+院校)"),
    B234( "B234", "该行程下已有场次有人报名，无法删除"),
    B235( "B235", "必填项%s为空"),
    B236( "B236", "%s已被其他学校获取，暂时无法操作"),
    B237( "B237", "宣讲会场已存在"),
    B238( "B238", "%s标签已存在"),
    B239( "B239", "原始密码错误"),
    B240( "B240", "验证码错误"),
    B241( "B241", "文件中%s数据重复，请修改后重新导入"),

    B242( "B242", "当前有用户持有该角色，不可删除。"),
    B243( "B243", "文件错误，Excel 列缺失：%s"),
    B244( "B244", "请联系所在机构管理员，配置发送通知邮箱信息。" ),
    B245( "B245", "状态错误，companyId 或者 memberId 缺失。memberId：%s，companyId : %s" ),
    B246( "B246", "简历修改状态时唯一码为空。" ),
    B247( "B247", "简历修改状态时未找到相应的投递记录。" ),
    B248( "B248", "数据校验未通过：%s" ),


    // 文件相关错误代码 B3
    B301("B301", "文件上传失败"),
    B302( "B302", "文件格式不支持。"),
    B303( "B303", "连接超时,请联系管理员。"),

    B400("B400", "%s重复报名"),
    B401("B401", "报名人数已满"),
    B402("B402", "存在相同供应商信息"),
    B403("B403", "该校区已有该位置，请重新编辑"),

    // 格式相关错误代码 B6
    B601( "B601", "%s格式错误 %s" ),
    B602( "B602", "格式校验失败：%s" ),
    B603( "B603", "未取到表头 %s，请对比 excel 模板文件。" ),

    B701( "B701", "通知推荐人邮件发送失败" ),

    // 状态相关错误代码 B8
    B801( "B801", "此简历已投递过该职位。"),
    B802( "B802", "未配置发送邮件的邮箱。"),

    B999("B999","未识别的业务异常：%s，%s"),

    /*------------------- 平台系统异常 E：取电子邮件英文 Email 首字母 --------------*/
    E001( "E001", "测试连接服务器失败！请检查邮件服务器地址、用户名或密码、域名是否正确！" ),
    E002( "E002" , "获取邮箱服务失败：%s" ),
    E003( "E003" , "邮件抓取出错" ),
    E004( "E004" , "由于跨机构转投递需发送邮件，请先配置邮件发件箱，再执行操作。" ),

    /*------------------- 平台系统异常 P：取系统英文 Platform 首字母 --------------*/
    P001("P001","%s"),
    P101("P101","系统异常，出现不合法正则表达式：%s"),
    P999("P999","未识别系统异常：%s，请截图联系技术人员处理" );

    private String code;

    private String detail;

    public String getCode() {
        return code;
    }

    public String getDetail() {
        return detail;
    }

    public String getDetail( String... detailArgs ) {
        return String.format(detail, detailArgs);
    }

    EomExceptionEnumImpl(String code, String detail) {
        this.code = code;
       this.detail = detail;
    }

    @Override
    public String toString() {
        return detail;
    }
}
